import {
	iaxios
} from './index.js';
import {
	ElMessage,
	ElMessageBox
} from "element-plus";


import {
	useStore
} from "vuex";

import {
	hGetCode
} from './spaceCode.js';

//console.log(import.meta.env);
function hGetDate() {
	return new Date().DtFormat?.("yyyy-MM-dd HH:mm:ss");
}

;
class CApi {
	_api;
	constructor(server) {
		// const store = useStore();
		// store.dispatch('user/LogOut').then(() => {
		// 	location.href = '/index';
		// })
		let baseApi = import.meta.env.VITE_API;
		if (import.meta.env.DEV) {}
		this._api = new iaxios(baseApi);
		return this._api;
	}
}
const _api = new CApi();

class capi {
	acmd = "api/Agency/GetDat";
	pathId;
	constructor(id) {
		this.pathId = id;
	}
	parm(id, par, dat) {
		return {
			"pathId": id,
			"urlstr": dat == null ? null : par || null,
			"parameter": dat || par || null
		}
	}
	async getList(par, dat) {
		let r = await _api.hDo({
			param: this.acmd,
			method: "post",
			dat: this.parm(this.pathId, par, dat ? JSON.stringify(dat) : null)
		});
		//console.log(r);

		let dts;
		try {
			dts = JSON.parse(r.data);
		} catch (e) {
			console.error("数据异常", r, par, dat, r);
		}
		return dts;
	}
	async doGet(param) {
		let r = await _api.hDo({
			param: this.acmd,
			dat: this.parm(this.pathId, param),
			method: "get"
		});
		let da = r.data;
		return da;
	}

}
class cCam extends capi {
	constructor(id) {
		super(id);
	}
	async play(code) {
		let r = await _api.hDo({
			param: this.acmd,
			method: "post",
			dat: this.parm(224, `{"cameraIndexCode":"${code}","streamType":0,"protocol":"ws","streamType": 1}`)
		})
		if(r.data){
			let url = JSON.parse(r.data).data?.url;
			return url;
		}
	
		
	}
}


/**基础信息
 * 
 */
class cBase extends capi {
	constructor() {
		super(187);
	}
	/**空间列表
	 * @param {Object} appId
	 * @param {Object} sign
	 * @param {Object} spaceType 空间类型编码
	 * @param {Object} spaceName 空间名称
	 * @param {Object} spaceUse 空间用途编码
	 */
	async getSpaceDats(appId = 1, sign = 1, spaceType = null, spaceName = null, spaceUse = null) {
		let d = await this.getList(`getSpaceList`, {
			appId: appId,
			sign: sign,
			spaceType: spaceType,
			spaceName: spaceName,
			spaceUse: spaceUse,
		});
		/**arr
		 * 
		id id
		spaceCode 空间编码
		spaceName 名称
		address 位置
		spaceType 类型编码
		spaceUse 用途编码
		parentId 	父id
		sort 序号
		bedCount 房间数
		createTime
		updateTime
		spaceArea
		spaceTypeName类型名称
		spaceUseName 用途名称
		parentName 父级名称
		departmentNames 科室名称拼接
		subSpaceList		子层
		distributionList array [object {5}]  分配信息
			id
			spaceId
			departId
			distributionValue
			departName
		devAreaList array [object {9}]  
			id
			areaName
			parentArea
			pointerId
			areaAttr
			regionArea
			appImgPath
			appDetailImgPath
			forder
		 */
		//console.log("space",d);
		return d; //.data;
	}

	/**部门信息列表
	 * @param {Object} appId
	 * @param {Object} sign
	 * @param {Object} departName
	 */
	async getDepart(appId = 1, sign = 1, departName = null) {

		let d = await this.getList(`getDepartList`, {
			appId: appId,
			sign: sign,
			departName: departName
		});
		/**arr 
			id id
			departNum 编码
			departName 名称
			childCount
			parentNum
			isDelete
			createTime
			sort
			isWx
			departcates
		 */
		return d?.data;
	}
}

/**能源信息
 * 
 */
class cEngrgy extends capi {
	constructor() {
		super(192);
	}

	/**医气管理-空间信息
	 * @param {Object} spaceId
	 */
	async getSpace(spaceId) {

		let d = await this.getList(`getSpaceInfoData?spaceId=${spaceId}`);
		/**object
		 * 
			name	空间名称
			spaceArea 建筑面积
			bedCount 床位数
			departCount 科室数
		 * 
		 */
		return d?.data;
	}

	/**能耗数据
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getData(spaceId, year) {
		/*object
		buildArea		建筑面积 m2
		bedCount		床位数量
		departCount		科室数量
		ydl					用电量 kwh
		zhnh			折合标煤 tce
		tpf			碳排放 tco2 
		ydlTb 			用电量同比 %
		ydlMonthList 	根据月份分组 
			name			月份
			count
			count1
			data			本期用量 kwh
			data1			上年同期用量 kwh
			
			
		dwmjYdl			面均电耗 kwh/m2		
		dwmjYdlTb		面均电耗 同比 %
		dcYdl			单床电耗 kwh/床		
		dcYdlTb		单床电耗 同比 %
		dcTpf 		单床碳排放 kgco2/床		
		dcTpfTb 单床碳排放 同比 %
		*/
		let d = await this.getList(`getEnergyData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);

		return d?.data;
	}
	/**能耗分项数据
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getDataItem(spaceId, year) {
		/**array
		name 分项名称
		count 
		count1
		data 能耗值
		data1 		
		subList	array[string]
		 */

		let d = await this.getList(`getEnergyItemData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);

		return d?.data;
	}


	/**下级空间数据、空间下支路数据 用电排名
	 * @param {Object} spaceId 空间id
	 * @param {Object} year
	 */
	async getSubDat(spaceId, year) {
		/**array
		sort 排名 
		name 	建筑、楼层、支路名称
		ydl 电量 kwh
		zhnh 折标煤 kgce
		tpf 碳排放 kgco2
		dwmjYdl 面均能耗 kwh/m2
		 */

		let d = await this.getList(`getSubEnergyData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);

		return d?.data;
	}


	/**支路列表
	 * @param {Object} spaceId 空间id
	 */
	async getSubSpace(spaceId) {
		/**array
		id 支路id 
		devName 支路名称
		 */
		let d = await this.getList(`getDevInfoBySpaceId?spaceId=${spaceId}`);
		return d?.data;
	}

	/**报警数据-能耗管理 cTypeId=111
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getAlarm(spaceId, year) {
		/**object
		alarmCount		告警数量
		unProcessedAlarmCount 待处理
		alarmList 
			time 告警时间
			nameT 告警部位
			alarmStatus 0 ：待处理 其他：已处理			
				
		 */

		let d = await this.getList(
			`getEnergyAlarmData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}&cTypeId=111`);

		return d?.data;
	}
	/**报警数据-空调末端   2空调机组
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getAlarmAir(spaceId, year) {
		/**object
		alarmCount		告警数量
		unProcessedAlarmCount 待处理
		alarmList 
			time 告警时间
			nameT 告警部位
			alarmStatus 0 ：待处理 其他：已处理			
			cstName			告警类别 				
		 */

		let d = await this.getList(
			`getEnergyAlarmData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}&cTypeId=411&devType=2`
		);

		return d?.data;
	}
	/**报警数据-医气管理 devType=101
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getAlarm2(spaceId, year) {
		/**object
		alarmCount		告警数量
		unProcessedAlarmCount 待处理
		alarmList 
			time 告警时间
			nameT 告警部位
			alarmStatus 0 ：待处理 其他：已处理			
			cstName			告警类别

				
		 */

		let d = await this.getList(
			`getEnergyAlarmData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}&cTypeId=411&devType=101`
		);

		return d?.data;
	}

	/**报警数据-运维
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getAlarmYW(spaceId, year = new Date().getFullYear()) {
		/**object
		alarmCount 告警数量
		unProcessedAlarmCount 待处理
		alarmList array [object {5}]  告警列表
			alarmId 告警id
			time 告警时间
			nameT 告警部位
			cstName 告警类别
			alarmStatus 告警状态
			
		alarmStatusList array [object {2}]  告警状态分组
			name 告警状态
			count 数量
			
		alarmTypeList array [object {2}] 		告警类型分组
			name 告警类型
			count 数量
				
		 */

		let d = await this.getList(`getEnergyAlarmData?spaceId=${spaceId}&year=${year}`);

		return d?.data;
	}
	/**报警详情-运维
	 * @param {Object} alarmId 
	 */
	async getAlarmInfoYW(alarmId) {
		/**object
		alarmId
		time		告警时间
		nameT
		cstName 告警类型
		alarmStatus 告警状态
		alarmInfo 告警信息				
		 */

		let d = await this.getList(`getEnergyAlarmInfo?alarmId=${alarmId}`);

		return d?.data;
	}


	/**医气管理-支路因子数据
	 * @param {Object} devId 支路id
	 */
	async getSubDev(devId) {
		/**array
		name 因子名称
		dataDate 数据时间
		uploadDate 上传时间
		data 能耗值
		
		name 因子名称
		dataDate 数据时间
		uploadDate 上传时间
		data 因子能耗值
		devId 设备编码
		devName 设备名称
		devLocal 设备位置
		
		 */
		let d = await this.getList(`getDevInstData?devNum=${devId}`);
		return d?.data;
	}

}

/**医用氧气
 * 
 */
class cO2 extends capi {
	constructor() {
		super(193);
	}

	/**医用氧气数据
	 * @param {Object} spaceId
	 * @param {year} year = [value] 
	 */
	async getData(spaceId, year) {

		let d = await this.getList(`getOxygenData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);
		/**object
		 * 
		sumOxygenData 全年累计氧气用量
		sumOxygenDataTb 全年累计氧气用量 同比		
		dcOxygenData 全年单床氧气用量
		dcOxygenDataTb 全年单床氧气用量 同比
		maxOxygenDayData 最高日用量
		avgOxygenDayData 平均日用量
		minOxygenDayData 最低日用量
		
		dayOxygenDayDataList array [object {2}] 氧气日历		
			name 日期
			data 用量值

		 * 
		 */
		return d?.data;
	}


	/**氧气压力
	 * @param {Object} spaceId
	 * @param {year} year = [value] 
	 */
	async getPressureData(spaceId, year) {

		let d = await this.getList(
			`getOxygenPressureData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);
		/**object
		 * 
		maxOxygenPressureData 最大压力
		avgOxygenPressureData 平均压力
		minOxygenPressureData 最小压力
		 * 
		 */
		return d?.data;
	}

	/**氧气压力-日数据
	 * @param {Object} spaceId
	 * @param {Object} dtm = “yyyy-MM-dd"
	 */
	async getPressureDataDay(spaceId, dtm) {

		let d = await this.getList(
			`getOxygenPressureDayData?spaceId=${spaceId}&dayTime=${dtm||new Date().DtFormat("yyyy-MM-dd")}`);
		/**object
		 * 
		maxOxygenPressureDayData 最大压力
		avgOxygenPressureDayData 平均压力
		minOxygenPressureDayData 最小压力
		oxygenYlDayData 氧气用量
		maxOxygenYlHourData 最大小时用量
		hour 小时
		 * 
		 */
		return d?.data;
	}
	/**氧气使用排名
	 * @param {Object} spaceId
	 * @param {Object} year = “yyyy-MM-dd"
	 */
	async getSortList(spaceId, year) {

		let d = await this.getList(
			`getOxygenYlDataSortList?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);
		/**array
		 * 
			name 楼层
			count 排名
			data	氧气用量
			data1	单床氧气用量

		 * 
		 */
		return d?.data;
	}

	/**氧气用量时点分布
	 * @param {Object} spaceId 
	 */
	async getMonth(spaceId) {

		let d = await this.getList(`getOxygenYlDataDayList?spaceId=${spaceId}`);
		/**array
		 * 
			name 日期 
			data 氧气用量 
		 * 
		 */
		return d?.data;
	}

	/**氧气设备
	 * @param {Object} spaceId
	 * @param {Object} year = “yyyy-MM-dd"
	 */
	async getDevs(spaceId, year) {

		let d = await this.getList(`getOxygenDevData?spaceId=${spaceId}`);
		/**array
		 * 		
		code 设备编号
		name 设备名称
		address 设备位置
		devStatus 设备状态
		 * 
		 */
		return d?.data;
	}

}

/**空调末端
 * 
 */
class cAir extends capi {
	constructor() {
		super(194);
	}

	/**空调末端能耗
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getData(spaceId, year) {

		let d = await this.getList(`getEnergyData?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);
		/**object 
		 * 
			 total 总量
			 data 单台量
			 tb 同比 负数为下降 正数为上升
			 
			 list array [object {3}] 			 图表数据					
			 					month 月份
			 					data 能耗
			 					hourData 运行时长
		 * 
		 */
		return d?.data;
	}
	/**电梯间空调用电排名
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getDataLift(spaceId, year) {

		let d = await this.getList(
			`getEnergyDataByNextSpace?spaceId=${spaceId}&year=${year||new Date().getFullYear()}`);
		/**array 
		 * 
			nowDate 本期能耗
			lastDate 上期能耗
			nowSingleData 本期单台能耗
			lastSingleData 上一年单台能耗
			spaceName 空间名称
		 * 
		 */
		return d?.data;
	}
	
	/**空调运行时点分布
	 * @param {Object} spaceId
	 * @param {Object} year
	 * @param {Object} month
	 */
	async getRunTime(spaceId, year, month) {
		let url =
			`getAirTemp?spaceId=${spaceId}&year=${year||new Date().getFullYear()}&month=${month||new Date().getMonth()+1}`;
//		console.log("统计 空调运行时点分布", url);
		let d = await this.getList(url);
		/**obj 
		 * 
			
			data 总运行时长
			hour
			list array [object {3}] 
				data 运行时长
				hour 时点
				list null 
		 * 
		 */
		return d?.data;
	}
	/**空调运行时点分布
	 * @param {Object} spaceId
	 * @param {Object} year
	 * @param {Object} month
	 */
	async getRunTime2(spaceId, year, month) {
		let url =
			`getAirRunTime?spaceId=${spaceId}&year=${year||new Date().getFullYear()}&month=${month||new Date().getMonth()+1}`;
		console.log("统计 空调运行时点分布", url);
		let d = await this.getList(url);
		/**obj 
		 * 
			
			data 总运行时长
			hour
			list array [object {3}] 
				data 运行时长
				hour 时点
				list null 
		 * 
		 */
		return d?.data;
	}

	/**空调集控
	 * @param {Object} spaceId 
	 */
	async getJk(spaceId) {

		let d = await this.getList(`getAirDataList?spaceId=${spaceId}`);
		/**obj 
		 * 
		airCount 空调末端数量
		zl 制冷数量 
		zr 制热数量
		sf 送风数量
		gj 关机数量
		list array [object {7}]  设备列表
			devnum 设备编号
			devname 设备名称
			airId (空调id) null无法控制
			devlocal 设备位置
			statusName 状态名称
			areaid 区域id
			devId 设备id 必需 查询详情使用
		 * 
		 */
		return d?.data;
	}

	/**运行温度
	 * @param {Object} spaceId
	 * @param {Object} code  111制热，222制冷
	 * @param {Object} year 
	 */
	async getTprt(spaceId, code = 111, year = new Date().getFullYear()) {

		let d = await this.getList(`getAirTemperature2?spaceId=${spaceId}&year=${year}&code=${code}`);
		/**obj 
		 * 
			min 最小
			max 最大
			avg 平均
			run 超限温运行占比
			count 超限温运行数量
		 * 
		 */
		return d?.data || {};
	}
	/**查询空调设备状态详情
	 * @param {Object} spaceId
	 * @param {Object} code  111制热，222制冷
	 * @param {Object} year 
	 */
	async getDetail(devNum) {

		let d = await this.getList(`getAirStatusInfo?devNum=${devNum}`);
		/**obj 
		 * 
			ktkjzt			空调开机状态
			airtemp 室内温度
			szwd 设置温度
			ktyxms 空调运行状态
			fx 风向
			ktzxzt 空调在线状态
			fs			风速
		 * 
		 */
		return d?.data;
	}
	/**获取制冷制热设定温度 
	 * @param {Object} code  111制热，222制冷
	 * @param {Object} year 
	 */
	async getTprtValue(code = 111, year = new Date().getFullYear()) {

		let d = await this.getList(`getAirType2?year=${year}&code=${code}`);
		/**obj 
			id id
			year 年份
			code 类型
			startDate 开始时间
			endDate 结束时间
			temperature 设定温度
		 * 
		 */
		return d?.data;
	}

	/**设定制冷制热温度
	 * @param {Object} id
	 * @param {Object} temperature 温度
	 * @param {Object} startDate  "2024-10-26"
	 * @param {Object} endDate  "2024-10-26"
	 * @param {Object} code  111制热，222制冷
	 * @param {Object} year 
	 */
	async setTprtValue(id, temperature, startDate = "2024-10-26", endDate = "2024-12-31", code = 111, year = new Date()
		.getFullYear()) {

		let d = await this.getList(`updateAirDict2`, {
			id: id,
			temperature: temperature,
			startDate: startDate,
			endDate: endDate,
			code: code,
			year: year
		});
		/**obj 
		 * 
			id id
			year 年份
			code 类型
			startDate 开始时间
			endDate 结束时间
			temperature 设定温度
		 * 
		 */
		return d?.data;
	}
}

/**空间2
 * 
 */
class cSpace2 extends capi {
	constructor() {
		super(198);
	}

	/**房间信息
	 * @param {Object} spaceId
	 */
	async getData(spaceId) {

		let d = await this.getList(`getSpaceInfoStat?spaceId=${spaceId}`);
		/**object 
		 * 
			roomCount 房间数量
			spaceUseList array [object {2}]  房间功能分类统计
				name 名称 
				count 数量				
			
			departList array [object {2}]  病区分布统计
				name 病区名称
				count 数量
			
			list	array [object {19}] 	房间列表
				id 必需
				spaceCode 房间编号
				spaceName 房间名称
				address
				spaceType
				spaceUse
				parentId
				sort
				bedCount
				createTime
				updateTime
				spaceArea
				devAreaList
				spaceTypeName		类型名称
				spaceUseName 用途名称
				parentName 楼层名称（上级空间名称）
				departmentNames 科室（病区）
				
				subSpaceList array [object {19}] 
					id
					spaceCode
					spaceName
					address
					spaceType
					spaceUse
					parentId
					sort
					bedCount
					createTime
					updateTime
					spaceArea
					subSpaceList
					distributionList
					devAreaList
					spaceTypeName
					spaceUseName
					parentName
					departmentNames					
					
				distributionList	array [object {5}]  科室分配信息
					id
					spaceId 空间id
					departId 科室id
					distributionValue 分配占比
					departName 科室名称
										
				
		 * 
		 */
		return d?.data;
	}

	/**空间编号获取空间信息
	 * @param {Object} code
	 */
	async getSpaceByCode(code) {
		let d = await this.getList(`getSpaceInfoByCode?spaceCode=${code}`);
		return d?.data;
	}

	/**空间树
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getSpaceTree() {

		let d = await this.getList(`getSpaceTree`);
		/**arr 
		 id integer 
		 spaceCode 空间编号
		 spaceName 空间名称
		 address 位置
		 spaceType 类型编号
		 spaceUse 用途编号
		 parentId 父id
		 sort integer 
		 bedCount 床位数
		 createTime
		 updateTime
		 spaceArea 面积
		 distributionList 分配信息
		 spaceTypeName 类型名称
		 spaceUseName 用途名称
		 parentName 父名称
		 departmentNames
		 subSpaceList array [object {19}]  子类
				字段同上
			
		 devAreaList array [object {9}] 
			id
			areaName
			parentArea integer 
			pointerId			integer 
			areaAttr			null 
			regionArea			integer 
			appImgPath			null 
			appDetailImgPath			null 
			forder integer 		 
		 */
		return d?.data;
	}

}

/**运维
 * 
 */
class cYW extends capi {
	constructor() {
		super(199);
	}

	/**运维记录
	 * @param {Object} spaceId
	 * @param {Object} dataType （wx：维修；xj：巡检）
	 * @param {Object} year
	 */
	async getData(spaceId, dataType = 'wx', year = new Date().getFullYear()) {

		let d = await this.getList(`getRecordData?spaceId=${spaceId}&year=${year}&dataType=${dataType}`);
		/**object 
		 * 
			recordCount 工单数量、任务数量
			unProcessedRecordCount 待处理任务数量
			finishRate 完成率
			avgFinishHour 平均用时 小时
			monthList array [object {3}]  按月分组
				name 月份
				count 任务数量
				dayList array [object {3}]  月内 按天分布数量
					name 日期
					count 任务数量
					recordInfoList array [object {5}]  任务记录
						gdCode 任务编号
						time	报修时间、巡检时间
						address 维修地点
						content 维修内容、巡检任务
						status 工单状态、任务状态
									
			wxDepartmentList array [object {2}]  按维修班组分布 、 按巡检班组分布
				name 维修班组、巡检班组
				count 数量
			
			xmList array [object {2}]  按维修项目类型分组、按设备系统类型分组
				name 项目类型、设备类型
				count 数量

			recordStatusList array [object {2}]  按工单状态分组、按任务状态分组
				name 任务状态
				count 数量
		 * 
		 */
		return d?.data;
	}
	/**运维记录详情
	 * @param {Object} code 任务编号
	 * @param {Object} dataType （wx：维修；xj：巡检） 
	 */
	async getDetail(code, dataType = 'wx') {

		let d = await this.getList(`getRecordInfoData?code=${code}&dataType=${dataType}`);
		/**object 
		 * 
			time 报修时间、计划执行时间
			bxName 报修人
			wxName 维修人
			xjName 巡检人
			status 当前状态
			logList array [object {3}]  任务记录
				time 执行时间
				title	标题
				content 内容
		 * 
		 */
		return d?.data;
	}
}

/**分体空调
 * 
 */
class cAirCon extends capi {
	constructor() {
		super(201);
	}

	/**建筑物列表查询
	 * @param {Object} buildId
	 */
	async getBuilds(buildId = 0) {

		let d = await this.getList(`buildingList`, {
			"buildingId": buildId
		});
		/**arr 
		 *  
			id 建筑id
			superId 上级建筑id
			code 建筑物编号
			roomNumber 房间号
			name 建筑名称
			fullName 建筑物路径
			isLeaf 是否莫及建筑
		 * 
		 */
		return d?.data;
	}

	/**空调详情查询
	 * @param {Object} airconId 空调id
	 */
	async getAirInfo(airconId = 0) {

		let d = await this.getList(`airConInfo`, {
			"airconId": airconId
		});
		/**object 
					id 空调 ID
					name 空调名称
					airconBrand 网关编号
					airconModel 控制器编号
					contCode 空调品牌
					gatewayCode 空调型号
					imei 预留
		 */
		return d?.data;
	}

	/**空调列表
	 * @param {Object} gatewayCode 网关编号
	 */
	async getAirList(gatewayCode = 0) {

		let d = await this.getList(`airConList`, {
			"gatewayCode": gatewayCode
		});
		/**arr 
				id 空调 ID
				name 空调名称
				airconBrand 网关编号
				airconModel 控制器编号
				contCode 空调品牌
				gatewayCode 空调型号
				imei 预留
		 */
		return d?.data;
	}

	/**空调通断电
	 * @param {Object} airconId 空调id
	 * @param {Object} boolValue true 通电 false 断电
	 * @param {Object} type 类型 0 空调
	 */
	async setAirPower(airconId, boolValue = true, type = 0) {

		let d = await this.getList(`airConPowerStatus`, {
			airconId: airconId, //空调id
			boolValue: boolValue, //true 通电 false 断电
			type: type //类型 0 空调
		});
		/**object 
				 
		 */
		return d?.data;
	}

	/**空调开关
	 * @param {Object} airconId 空调id
	 * @param {Object} boolValue true 开机 false 关机
	 * @param {Object} type 类型 0 空调
	 */
	async setAirOnOff(airconId, boolValue = true, type = 0) {

		let d = await this.getList(`airConRunStatus`, {
			airconId: airconId,
			boolValue: boolValue,
			type: type
		});
		/**object 
				 
		 */
		return d?.data;
	}

	/**空调温度设置
	 * @param {Object} airconId 空调id
	 * @param {Object} intValue 温度范围：17~30°C
	 * @param {Object} type 类型 0 空调
	 */
	async setAirValue(airconId, intValue, type = 0) {

		let d = await this.getList(`airConChangeTemp`, {
			airconId: airconId,
			intValue: intValue,
			type: type
		});
		/**object 
				 
		 */
		return d?.data;
	}



	/**空调风速设置
	 * @param {Object} airconId 空调id
	 * @param {Object} intValue 风速代码 1 自动 2 低 3 中 4 高
	 * @param {Object} type 类型 0 空调
	 */
	async setAirMode(airconId, intValue, type = 0) {

		let d = await this.getList(`airConChangeFandspeed`, {
			airconId: airconId,
			intValue: intValue,
			type: type
		});
		/**object 
				 
		 */
		return d?.data;
	}

	/**读取空调状态
	 * @param {Object} buildingId 空调id
	 * @param {Object} netStatus 在线状态：0 离线，1 在线，null 不使用该条件
	 * @param {Object} runStatus 运行状态：0 关机，1 开机，null 不使用该条件
	 * @param {Object} lowerTemp 查询室温下限，null 不使用该条件
	 * @param {Object} upperTemp 查询室温上限，null 不使用该条件
	 * @param {Object} pageSize 每页大小，最大 50
	 * @param {Object} pageNumber 当前页码
	 */
	async getAirStatus(buildingId, pageNumber = 1, pageSize = 50, netStatus = null, runStatus = null, lowerTemp = null,
		upperTemp = null) {

		let d = await this.getList(`airConStatusList`, {
			buildingId: buildingId,
			netStatus: netStatus,
			runStatus: runStatus,
			lowerTemp: lowerTemp,
			upperTemp: upperTemp,
			pageSize: pageSize,
			pageNumber: pageNumber
		});
		/**object 
				 total
				 rows array [object {26}] 
					 id 空调 ID
					 name 空调名称
					 contCode 控制器编号
					 gatewayCode 网关编号
					 netStatus 在线状态：true 是，false 否
					 powerStatus 通电状态：true 是，false 否
					 runStatus 开机状态：true 是，false 否
					 standbyStatus 待机状态：true 是，false 否
					 personStatus 有人状态：true 有人，false 无人， null 未定义
					 efficiencyStatus 低能效状态：true 是，false 否
					 powera A 相功率（单相电功率）
					 voltagea A 相电压（单相电电压）
					 currenta A 相电流（单相电电流）
					 powerb B 相功率
					 voltageb B 相电压
					 currentb B 相电流
					 powerc B 相功率
					 voltagec B 相电压
					 currentc B 相电流
					 electricity 当日用电量(kWh)
					 runTimes 用电时长(小时)
					 setTemp 设置温度
					 realTemp 室温
					 mode 运行模式
					 fanSpeed 风速
					 airSwing 风向
		 */
		return d?.data;
	}

	/**读取操作事件记录
	 * @param {Object} buildingId 建筑id
	 * @param {Object} airconId  	空调id
	 * @param {Object} startDate 	开始日期：yyyy-MM-dd
	 * @param {Object} endDate 		截至日期：yyyy-MM-dd（与开始日期同月份）
	 * @param {Object} pageSize 	每页大小，最大 50
	 * @param {Object} pageNumber 当前页码
	 */
	async setAirRecord(buildingId, airconId, startDate, endDate, pageNumber = 1, pageSize = 50) {

		let d = await this.getList(`airConChangeFandspeed`, {
			buildingId: buildingId,
			airconId: airconId,
			startDate: startDate,
			endDate: endDate,
			pageSize: pageSize,
			pageNumber: pageNumber
		});

		/**object 
				 total
				 rows array [object {13}] 
					 id
					 valueTime 操作事件：yyyyMMddHHmmss
					 airconName 空调名称
					 userName 操作人
					 operateType 操作类别
					 operateValue 操作值
					 operateDesc 描述
					 operateResult 结果状态
					 errCode 错误码
					 valueTimeText
					 operateTypeText
					 operateResultText
					 errCodeText		 null 
		 */
		return d?.data;
	}

}

/**设备信息
 * 
 */
class cDev extends capi {
	constructor() {
		super(202);
	}

	/**设备（支路）列表
	 * @param {Object} spaceId
	 * @param {Object} devType 101医用气体, 26电表, 27水表, 2空调机组
	 */
	async getData(spaceId, devType = 2, pageNum = 1, pageSize = 50) {

		let d = await this.getList(
			`getDevInfoList?spaceId=${spaceId}&devType=${devType}&pageNum=${pageNum}&pageSize=${pageSize}`);
		/**object 		 
			total
			pageNum
			pageSize
			size
			startRow
			endRow
			pages
			prePage
			nextPage
			isFirstPage boolean 
			isLastPage boolean 
			hasPreviousPage boolean 
			hasNextPage boolean 
			navigatePages 
			navigatepageNums
			navigateFirstPage
			navigateLastPage
			firstPage
			lastPage
			list array [object {7}] 
				devId 设备（支路）id
				devName 设备（支路）名称
				devType 设备类型id
				devTypeName 设备类型名称
				spacePath 空间路径
				address 设备地址
				devStatus number   设备状态
		 */
		return d?.data;
	}
}
class cDevAir extends capi {
	constructor() {
		super(206);
	}


}




const callApi = () => {
	return {
		devAir: new cDevAir(),
		dev: new cDev(),
		airCon: new cAirCon(), //分体空调接口
		yw: new cYW(), //运维管理
		space2: new cSpace2(), //运维管理-房间信息
		air: new cAir(), //空调末端
		cam: new cCam(189),
		base: new cBase(), //基础
		engrgy: new cEngrgy(), //能源管理
		o2: new cO2(), //氧气管理
		hGetCode: hGetCode,
	}
}
export default callApi;



/**xxxxxx
 * 
 */
class cTemplate extends capi {
	constructor() {
		super(192);
	}

	/**xxxx
	 * @param {Object} spaceId
	 * @param {Object} year
	 */
	async getData(spaceId, year = new Date().getFullYear()) {

		let d = await this.getList(`xxx?spaceId=${spaceId}&year=${year}`);
		/**object 
		 *  
		 * 
		 */
		return d?.data;
	}
}




function hWarning(msg, t) {
	ElMessageBox.confirm(msg, (t || "") + "数据异常！", {
		confirmButtonText: "确定",
		type: "warning",
		center: true
	})
}

class cUser {
	constructor() {}
	async login(uinfo) {
		let r = await _api.hDo({
			param: "api/Login/Login",
			method: "post",
			dat: uinfo
		});
		let loinfo;
		return new Promise((resolve, reject) => {
			try {
				loinfo = JSON.parse(r.data);
				resolve(loinfo);
			} catch (e) {
				reject(r.data);
			}
		})
	}
}

const uApi = new cUser();
export function getInfo() {

}

export function getToken() {

}
export function login(uinfo) {
	return uApi.login(uinfo);
}
export function logout() {

}
export function setToken() {

}
/**
 * 
 */